package sort 
{
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	/**
	 * 场景人物层深排序的工具类
	 * @author gcxk721
	 */
	public final class SceneSortUtil 
	{
		/**
		 * 单例模式
		 */
		private static var instance : SceneSortUtil;
		
		/**
		 * 显示组件的存储列表
		 */
		private var m_displayLst : Array = new Array();
		
		/**
		 * 排序的父容器
		 */
		private var m_container : DisplayObjectContainer;
		
		/**
		 * 排序值
		 * 对排序对象的y值进行排序
		 */
		private var m_sortFields : Array = ["y"];
		
		public function SceneSortUtil() 
		{
			if (instance != null)
			{
				throw new Error("SceneSortUtil is only have one instance");
			}
		}
		
		/**
		 * 设置所有
		 * @param	container
		 */
		public function setParent(container : DisplayObjectContainer) : void
		{
			m_container = container;
		}
		
		/**
		 * 在场景管理器中注册一个组件
		 * @param	display
		 * 显示对象
		 * @param	id
		 * 生物ID
		 */
		public function enroll(display : DisplayObject) : void
		{
			m_displayLst.push(display);
		}
		
		/**
		 * 在场景管理器中注销一个组件
		 * @param	display
		 * @param	id
		 */
		public function logout(display : DisplayObject) : void
		{
			var index : int = m_displayLst.indexOf(display);
			if (index != -1)
			{
				m_displayLst.splice(index, 1);
			}
		}
		
		/**
		 * 排序函数
		 */
		public function sortMethod() : void
		{
			if (m_container == null)
			{
				return;
			}
			var result : Array;
			result = m_displayLst.sortOn(m_sortFields, Array.NUMERIC | Array.RETURNINDEXEDARRAY);
			for (var i:int = 0; i < result.length; i++)
			{
				var display : DisplayObject = m_displayLst[result[i]] as DisplayObject;
				if (display.parent == m_container && m_container.getChildIndex(display) != i)
					m_container.setChildIndex(display, i);
			}
		}
		
		/**
		 * 取得SceneSortUtil的唯一实例
		 * @return
		 */
		public static function getInstance() : SceneSortUtil
		{
			if (instance == null)
			{
				instance = new SceneSortUtil();
			}
			return instance;
		}
		
	}

}